package model1

import "fmt"

/*

定义函数类型

我们可以使用type关键字来定义一个函数类型，具体格式如下：

type calculation func(int, int) int

上面语句定义了一个calculation类型，它是一种函数类型，这种函数接收两个int类型的参数并且返回一个int类型的返回值。
简单来说，凡是满足这个条件的函数都是calculation类型的函数，例如下面的add和sub是calculation类型。

*/

type calculation func(int, int) int

func add(x, y int) int {
	return x + y
}
func sub(x, y int) int {
	return x - y
}

//add和sub都能赋值给calculation类型的变量。
func Test1() {
	var c calculation                    // 声明一个calculation类型的变量c
	var d calculation                    // 声明一个calculation类型的变量d
	c = add                              // 把add赋值给c
	d = sub                              // 把sub赋值给d
	fmt.Printf("c(1, 2): %v\n", c(1, 2)) //像调用add一样调用c
	fmt.Printf("type of c : %T\n", c)    // type of c : model1.calculation
	fmt.Printf("d(1, 2): %v\n", d(1, 2)) //像调用sub一样调用d
	fmt.Printf("type of d : %T\n", d)    // type of d : model1.calculation
}
